package tech.aistar.day05.homework;

import tech.aistar.util.ArrayUtil;

import java.util.Arrays;

/**
 * 本类用来演示: 员工类
 *
 * @author: success
 * @date: 2021/3/12 4:42 下午
 */
public class Emp {
    private int id;//编号

    private String name;//姓名

    private double salary;//工资

    private Emp[] emps;//一个上司拥有多个下属

    public Emp() {
    }

    public Emp(int id, String name, double salary, Emp[] emps) {
        this.id = id;
        this.name = name;
        this.salary = salary;
        this.emps = emps;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public Emp[] getEmps() {
        return emps;
    }

    public void setEmps(Emp[] emps) {
        this.emps = emps;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }

    /**
     * 添加下属信息...
     * @param e
     */
    public void add(Emp e){
        //判断是否为下属在调用这个方法
        if(emps == null){
            System.out.println("sorry,你就是个下属,你没有任何权限添加下属");
            return;
        }
        //默认的上司的给定初始化的下属的数组的长度为0
        //在每次添加员工之前需要对数组进行扩容操作
        emps = Arrays.copyOf(emps,emps.length+1);
        //通过下标进行赋值操作
        emps[emps.length-1] = e;
    }

    /**
     * 统计下属的个数
     */
    public void countEmps(){
        if(emps == null){
            System.out.println("sorry,你就是个下属,你没有任何权限添加下属");
            return;
        }
        if(emps.length==0){
            System.out.println("sorry,你目前还没有下属,请你先添加!");
            return;
        }
        System.out.println("下属个数:"+emps.length);
    }

    /**
     * 打印下属信息
     */
    public void printEmp(){
        if(emps == null){
            System.out.println("sorry,你就是个下属,你没有任何权限添加下属");
            return;
        }
        if(emps.length==0){
            System.out.println("sorry,你目前还没有下属,请你先添加!");
            return;
        }
        System.out.println("下属信息是:>");
        for (Emp emp : emps) {
            System.out.println("\t"+emp);
        }
    }

    /**
     * 根据员工的编号进行删除操作
     * @param id
     */
    public void delById(int id){
        if(emps == null){
            System.out.println("sorry,你就是个下属,你没有任何权限添加下属");
            return;
        }
        if(emps.length==0){
            System.out.println("sorry,你目前还没有下属,请你先添加!");
            return;
        }

        //因为id是唯一的,确定一个新的数组
        Emp[] temp = new Emp[emps.length-1];

        //定义一个下标计数器
        int pos = 0;

        //遍历原来的数组
        for (int i = 0; i < emps.length; i++) {
            if(emps[i].getId()!=id){
                temp[pos++] = emps[i];
            }
        }

        //将temp的地址重新赋值给emps
        emps = temp;
    }
}
